//* 百度→ 计算数组的元素出现的个数
export function qc(arr) {
  const tempArr = [];
  const obj = {};
  const resultArr = [];

  arr.forEach((v) => {
    if (!tempArr.includes(v)) {
      tempArr.push(v);
    }
  });
  arr.forEach((v) => {
    if (obj[v]) {
      obj[v] += 1;
    } else {
      obj[v] = 1;
    }
  });
  tempArr.forEach((v) => {
    resultArr.push({
      name: v,
      num: obj[v],
    });
  });

  return resultArr;
}

//* 百度→ 中国标准时间format yyyy-mm-dd
const format = (time) => {
  let ymd = '';
  const mouth = (time.getMonth() + 1) >= 10 ? (time.getMonth() + 1) : (`0${time.getMonth() + 1}`);
  const day = time.getDate() >= 10 ? time.getDate() : (`0${time.getDate()}`);
  ymd += `${time.getFullYear()}-`; // 获取年份。
  ymd += `${mouth}-`; // 获取月份。
  ymd += day; // 获取日。
  return ymd; // 返回日期。
};

//* 百度→ 已知开始时间和结束时间 计算出中间的所有日期
export function getAllDate(start, end) {
  const dateArr = [];
  const startArr = start.split('-');
  const endArr = end.split('-');
  const db = new Date();
  db.setUTCFullYear(startArr[0], startArr[1] - 1, startArr[2]);
  const de = new Date();
  de.setUTCFullYear(endArr[0], endArr[1] - 1, endArr[2]);
  const unixDb = db.getTime();
  const unixDe = de.getTime();
  let stamp;
  const oneDay = 24 * 60 * 60 * 1000;
  for (stamp = unixDb; stamp <= unixDe;) {
    // eslint-disable-next-line radix
    dateArr.push(format(new Date(parseInt(stamp)))); // format调用上面的 format 函数
    stamp += oneDay;
  }
  return dateArr;
}

//* 百度→ 数组对象去重
// array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
// (function(必选初始值或计算结束返回值, 必选当前元素, 可选索引, 可选原数组),可选函数初始值)

export function dateCount(array) {
  const obj = {};
  const array1 = array.reduce((a, b) => {
    // eslint-disable-next-line no-unused-expressions
    obj[b.date] ? '' : obj[b.date] = true && a.push(b);
    return a;
  }, []);
  return array1;
}
